/**
 * 项目路由助手
 * 用于处理跨项目路由
 */

const projectHelper = require('../../../helpers/project_helper.js');

/**
 * 项目间导航：跳转到指定项目页面
 * @param {String} projectId 项目ID
 * @param {String} pagePath 页面路径，相对于项目根目录
 * @param {Object} query 查询参数
 */
function navigateToProject(projectId, pagePath, query = {}) {
  if (!projectId || !pagePath) {
    console.error('[ProjectRouter] 无效的项目ID或页面路径');
    return;
  }

  // 构建完整页面路径
  const fullPath = buildProjectPagePath(projectId, pagePath);
  
  // 构建查询字符串
  let queryString = '';
  if (query && typeof query === 'object') {
    queryString = Object.keys(query)
      .filter(key => query[key] !== undefined && query[key] !== null)
      .map(key => `${key}=${encodeURIComponent(query[key])}`)
      .join('&');
  }
  
  // 完整URL
  const url = queryString ? `${fullPath}?${queryString}` : fullPath;

  // 导航
  console.log('[ProjectRouter] 跳转到:', url);
  wx.navigateTo({
    url,
    fail: (err) => {
      console.error('[ProjectRouter] 跳转失败:', err);
      
      // 尝试重定向
      wx.redirectTo({
        url,
        fail: (err2) => {
          console.error('[ProjectRouter] 重定向也失败:', err2);
        }
      });
    }
  });
}

/**
 * 项目间重定向：关闭当前页并跳转到指定项目页面
 * @param {String} projectId 项目ID
 * @param {String} pagePath 页面路径，相对于项目根目录
 * @param {Object} query 查询参数
 */
function redirectToProject(projectId, pagePath, query = {}) {
  if (!projectId || !pagePath) {
    console.error('[ProjectRouter] 无效的项目ID或页面路径');
    return;
  }

  // 构建完整页面路径
  const fullPath = buildProjectPagePath(projectId, pagePath);
  
  // 构建查询字符串
  let queryString = '';
  if (query && typeof query === 'object') {
    queryString = Object.keys(query)
      .filter(key => query[key] !== undefined && query[key] !== null)
      .map(key => `${key}=${encodeURIComponent(query[key])}`)
      .join('&');
  }
  
  // 完整URL
  const url = queryString ? `${fullPath}?${queryString}` : fullPath;

  // 重定向
  console.log('[ProjectRouter] 重定向到:', url);
  wx.redirectTo({
    url,
    fail: (err) => {
      console.error('[ProjectRouter] 重定向失败:', err);
    }
  });
}

/**
 * 重新启动并跳转到指定项目页面
 * @param {String} projectId 项目ID
 * @param {String} pagePath 页面路径，相对于项目根目录
 * @param {Object} query 查询参数
 */
function reLaunchToProject(projectId, pagePath, query = {}) {
  if (!projectId || !pagePath) {
    console.error('[ProjectRouter] 无效的项目ID或页面路径');
    return;
  }
  
  // 设置当前项目
  projectHelper.setCurrentProject(projectId);

  // 构建完整页面路径
  const fullPath = buildProjectPagePath(projectId, pagePath);
  
  // 构建查询字符串
  let queryString = '';
  if (query && typeof query === 'object') {
    queryString = Object.keys(query)
      .filter(key => query[key] !== undefined && query[key] !== null)
      .map(key => `${key}=${encodeURIComponent(query[key])}`)
      .join('&');
  }
  
  // 完整URL
  const url = queryString ? `${fullPath}?${queryString}` : fullPath;

  // 重启并跳转
  console.log('[ProjectRouter] 重新启动到:', url);
  wx.reLaunch({
    url,
    fail: (err) => {
      console.error('[ProjectRouter] 重新启动失败:', err);
    }
  });
}

/**
 * 构建项目页面路径
 * @param {String} projectId 项目ID
 * @param {String} pagePath 页面路径，相对于项目根目录
 * @returns {String} 完整的页面路径
 */
function buildProjectPagePath(projectId, pagePath) {
  // 项目路径前缀
  const projectPrefix = `/projects/${projectId}/pages/`;
  
  // 移除路径中可能存在的前导斜杠
  if (pagePath.startsWith('/')) {
    pagePath = pagePath.substr(1);
  }
  
  // 处理包含pages的路径
  if (pagePath.startsWith('pages/')) {
    pagePath = pagePath.substr(6);
  }
  
  return projectPrefix + pagePath;
}

module.exports = {
  navigateToProject,
  redirectToProject,
  reLaunchToProject,
  buildProjectPagePath
}; 